package com.hb.model;

import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;

import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.NodeEntity;
import org.springframework.data.neo4j.annotation.RelatedTo;

/**
 * 表示 Order 类是节点
 */
@NodeEntity
public class Order {
    /**
     * Neo4j 上的所有实体必要要有一个图 ID。这大致类似于 JPA @Entity 以及 MongoDB @Document 类中使用 @Id 注解的属性。在这里，@GraphId 注解标注的属性必须是 Long 类型。
     */
    @GraphId
    private Long id;

    private String customer;

    private String type;

    /**
     * 与条目之间的关联关系
     * items 属性上使用了 @RelatedTo 注解，这表明 Order 与一个 Item 的 Set 存在关联关系。type 属性实际上就是为关联关系建立了一个文本标记。它可以设置成任意的值，
     * 但通常会给定一个易于人类阅读的文本，用来简单描述这个关联关系的特征。
     * Order 和 Item 之间的关联关系很简单，关系本身并不包含任何的数据。因此，@RelatedTo 注解就足以定义关联关系。
     * 在当前的数据模型中，我们将条目和产品的信息组合到了 Item 类中。但是，当我们重新考虑的时候，会发现订单会与一个或多个产品相关联。订单与产品之间的关系构成了订单的一个条目。
     */
    @RelatedTo(type = "HAS_ITEMS")
    private Set<Item> items = new LinkedHashSet<Item>();

    public String getCustomer() {
        return customer;
    }

    public void setCustomer(String customer) {
        this.customer = customer;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Collection<Item> getItems() {
        return items;
    }

    public void setItems(Set<Item> items) {
        this.items = items;
    }

    public Long getId() {
        return id;
    }

}
